/*****************************************
 *	PropiedadesMundo.cpp
 * 	Autor: Martin Lucero
 ****************************************/

#include "PropiedadesMundo.h"
#include "VentanaDiseniador.h"
#include <gtkmm/label.h>

#include <iostream>

PropiedadesMundo::PropiedadesMundo() {
	set_row_spacing(3);
	set_column_spacing(5);
	ajuste_jugadores = Gtk::Adjustment::create(1, 1, 4);

	d_SpinButton_jugadores.set_adjustment(ajuste_jugadores);
	d_SpinButton_jugadores.set_wrap();
	d_SpinButton_jugadores.set_numeric();
	d_SpinButton_jugadores.set_alignment(Gtk::ALIGN_CENTER);
	d_SpinButton_jugadores.set_update_policy(Gtk::UPDATE_IF_VALID);

	d_Entry_nombremundo.set_max_length(20);
	d_Entry_nombremundo.set_alignment(Gtk::ALIGN_END);
	d_Entry_nombremundo.set_placeholder_text("Escribe un nombre...");
	d_Entry_nombremundo.signal_changed().connect(sigc::mem_fun(
			*this, &PropiedadesMundo::on_entry_changed));

	Gtk::Label *etiqueta;

	etiqueta = Gtk::manage(
			new Gtk::Label("PROPIEDADES DEL MUNDO", Gtk::ALIGN_CENTER));
	attach(*etiqueta, 0, 0, 2, 1);

	etiqueta = Gtk::manage(new Gtk::Label("Nombre", Gtk::ALIGN_END));
	attach(*etiqueta, 0, 1, 1, 1);
	attach_next_to(d_Entry_nombremundo, *etiqueta, Gtk::POS_RIGHT, 1, 1);

	etiqueta = Gtk::manage(new Gtk::Label("Jugadores", Gtk::ALIGN_END));
	attach(*etiqueta, 0, 2, 1, 1);
	attach_next_to(d_SpinButton_jugadores, *etiqueta, Gtk::POS_RIGHT, 1, 1);

	nivel_actual = new PropiedadesNivel;
	vec_prop_niveles.push_back(nivel_actual);
}

PropiedadesNivel* PropiedadesMundo::getPropiedadesNivelActual() const {
	return nivel_actual;
}

bool PropiedadesMundo::cambiarNivelActual(unsigned idNivel) {
	if (idNivel == nivel_actual->getId()) {
		return false;
	}
	unsigned cantElementos = vec_prop_niveles.size(), pos = 0;
	while (pos < cantElementos) {
		if (vec_prop_niveles[pos]->getId() == idNivel) {
			nivel_actual = vec_prop_niveles[pos];
			return true;
		}
		++pos;
	}
	return false;
}

void PropiedadesMundo::crearNuevoPropiedadesNivel() {
	nivel_actual = new PropiedadesNivel;
	vec_prop_niveles.push_back(nivel_actual);
}

//void PropiedadesMundo::resetar() {
//	ajuste_jugadores->set_value(1);
//	d_Entry_nombremundo.set_text("");
//	for(unsigned i = 0; i < vec_prop_niveles.size(); ++i) {
//		vec_prop_niveles[i]->resetear();
//		delete (vec_prop_niveles[i]);
//	}
//}

//void PropiedadesMundo::guardar(Mundo &mundo) {
//	mundo.setNombre(d_SpinButton_jugadores.get_text());
//	mundo.setCantidadJugadores((unsigned)d_SpinButton_jugadores.get_value_as_int());
//	for(unsigned i = 0; i < vec_prop_niveles.size(); ++i) {
//		vec_prop_niveles[i]->guardar(mundo);
//	}
// }
//
//void PropiedadesMundo::cargar(const Mundo& mundo) {
//	d_Entry_nombremundo.set_text(mundo.getNombre());
//	d_SpinButton_jugadores.set_value(mundo.getCantidadJugadores());
// }

void PropiedadesMundo::on_entry_changed() {
	VentanaDiseniador *ventana = dynamic_cast<VentanaDiseniador*>(
			get_toplevel());
	ventana->getVistaNavegador()->on_name_mundo_changed(
			d_Entry_nombremundo.get_text());
}

PropiedadesMundo::~PropiedadesMundo() {
	for (unsigned i = 0; i < vec_prop_niveles.size(); ++i) {
		delete (vec_prop_niveles[i]);
	}
}